水耕栽培カメラ作業ログ lab:mogDev
8/13(月) もくもくログ
目標
カメラで撮影
データをどこかに送る
やったこと
買ったキットのSDカードにOSがすでに入っていた
SDカード刺して起動、rasbianのインストール
rasbianのアップデート(30-40分くらい)、再起動
シャットダウン、起動の方法確認
https://www.youtube.com/watch?v=GImeVqHQzsE
一旦シャットダウンしてカメラモジュールを接続
黒いところを持ち上げてモジュールを差し込み、黒いところをはめる
向きはこう
https://gyazo.com/7d05ab1b6e4989e7798903f5e469914f
電源ON
カメラ機能をONにする
ターミナル起動して sudo raspi-config
5 Interfacing Options -> P1 Camera -> enabled
raspi-configをfinishしてreboot
ファームウェアのアップデート
code:terminal
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.52-v7+ #1123 SMP Wed Jun 27 17:35:49 BST 2018 armv7l GNU/Linux pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.14.52-v7+ #1123 SMP Wed Jun 27 17:35:49 BST 2018 armv7l GNU/Linux 最新だったっぽい
picameraインストール
code:terminal
pi@raspberrypi:~ $ sudo apt-get install python3-picamera
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
python3-picamera はすでに最新バージョン (1.13) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
もうはいってた…?
最初にpythonのバージョンを確認しておくべきだった
code:terminal
pi@raspberrypi:~ $ python --version
Python 2.7.13
ドキュメントのPytthon3.2+以上のところをみていたが、手順の違いはなさそう
picamera install
code:terminal
pi@raspberrypi:~ $ sudo apt-get install python-pip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
python-pip はすでに最新バージョン (9.0.1-2+rpt2) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
pi@raspberrypi:~ $ sudo pip install picamera
Requirement already satisfied: picamera in /usr/lib/python2.7/dist-packages
もっとわかりやすいドキュメント見つけた
camera enableもCUIでやったが、GUIも用意されている
そしてpicameraはすでにはいっていたりするので、やっぱり上記工程不要だった
RasbianにプレインストールされているPython 2.7.9やPython 3.4.2を使用する場合は、picameraライブラリもインストールされているため、改めてインストールする必要はありません。
カメラでプレビューしてみるぞ
ディレクトリ作成 /home/pi/hydroponics-logs
スタートメニュー>プログラミング>Python3
camera.pyとして作成したディレクトリに保存
picamera.pyにしちゃダメ
code:camera.py
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
sleep(10)
camera.stop_preview()
保存、F5で実行
できた
https://gyazo.com/9704db03482cc624073b4e87f679fdc9
画像をファイルとして保存する
code:camera.py
camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/image.jpg')
camera.stop_preview()
上記コードでプレビューが終了せず、本体を強制終了した
日本語環境にしていたため、/home/pi/Desktop/が存在せず(/home/pi/デスクトップ/になっている)、エラーで止まっていたと予想?
/home/pi/hydroponics-logs/にしたら撮影した画像が保存されていた
preview強制終了する方法どうすれば…?
こまった
今回プレビュー使わないしとりあえず置いておく
It’s important to sleep for at least 2 seconds before capturing, to give the sensor time to set its light levels.
capture()だけでも撮影できるが、露光調整?のためにsleep(2)を挟んだほうがいい
撮影した画像のファイル名に時刻を入れる
文字列結合もいつもの感じ
できた
撮影した画像をどこかに投げる
npm installとnpm -g installの違いみたいな感じ?
npmとbrewくらい違うらしい
code:terminal
pi@raspberrypi:~ $ pip install google-api-python-client PyDrive
テキストを書き込むサンプルを実行するも下記エラー
code:terminal
ImportError: No module named 'pyDrive'
開発ウィンドウにはPython3.5.3、pip show pydriveしたときにはpython2.7のディレクトリに入っているのが気になる
IDE(IDLE)で実行していたが、IDLEはpython3で、pipはpython2なのがいけなかった。
pip3 install pydriveして、IDE再起動したら動いた
8/17(金) もくもくログ
目標
GoogleDriveに撮影した画像をアップロードする
画像サイズを適切なものに変更する
カメラ撮影時のオプション、便利なものがないか見る
やったこと
GoogleDriveにアクセスする
テキストファイルを保存する
Googleドライブにテキストファイルを作成しよう
実行するとコンソールにURLが表示され、アクセスすると認証コードが発行できる。コンソールにコードを入力すると認証成功。
GoogleDriveにアクセスすると、テキストファイルが作成できていることが確認できる
実行ファイルを同じディレクトリ内にcredentials.jsonが作成されている
Google Drive APIで利用する認証情報が保存されている
特定のフォルダにファイルを保存する
フォルダにアップロード
code:write_text.py
folder_id='(フォルダのURLのfolfers/以下の文字列)'
f = drive.CreateFile({
'title': 'test.txt',
})
任意のフォルダにファイルが作成できた
画像をアップロードする
プログラム作成
code:write_text.py
f = drive.CreateFile({
'title': 'test.jpeg',
'mimeType': 'image/jpeg',
})
f.SetContentFile('images/test.jpg')
f.Upload()
できた
撮影した画像をアップロードする
写真撮影 -> OAuth認証 -> ファイルアップロード -> ローカルのファイルを削除という流れのはず
code:terminal
Traceback (most recent call last):
File "/home/pi/hydroponics-logs/camera.py", line 19, in <module>
camera = PiCamera()
File "/usr/lib/python3/dist-packages/picamera/camera.py", line 433, in __init__
self._init_preview()
File "/usr/lib/python3/dist-packages/picamera/camera.py", line 513, in _init_preview
File "/usr/lib/python3/dist-packages/picamera/renderers.py", line 558, in __init__
self.renderer.inputs0.connect(source).enable() File "/usr/lib/python3/dist-packages/picamera/mmalobj.py", line 2212, in enable
prefix="Failed to enable connection")
File "/usr/lib/python3/dist-packages/picamera/exc.py", line 184, in mmal_check
raise PiCameraMMALError(status, prefix)
picamera.exc.PiCameraMMALError: Failed to enable connection: Out of resources
preview確認用のターミナルを裏で開いていたからかも
pythonの複数行コメントアウト "" で囲む
写真撮影 -> OAuth認証 -> ファイルアップロードまでできた
ファイルを削除
できた
ファイルアップロードする前にアップロードしようとしているファイルが存在しているかチェックをかけたい
ファイルが存在していたら画像アップロード+ローカルファイル削除、存在していなかったら同じ日付のテキストファイルをアップロードするようにした(どの時点のファイルアップロードがミスったか気づくために)
画像サイズを適切なものに変更する
そんなにファイルサイズ大きくしたくないので860x600にした
code:camera.py
camera = PiCamera()
camera.resolution = (860, 600)
カメラ撮影時のオプション
たくさんある
annotate_text : 文字列を画像に追加できる
撮影日をいれとこう
https://gyazo.com/0c96d188fc18e7571442b924c752cb40
ホワイトバランス、露出も設定できるらしい。デフォルトはどちらもauto
camera.awb_mode: ホワイトバランス
camera.exposure_mode: 露出
ここまでのコードをGIthubに上げた
定期的に写真を撮影する
cronで動かすのに、今までIDE上で実行していたがターミナルから叩いてみる
code:terminal
pi@raspberrypi:~/hydroponics-logs $ sh camera.py
camera.py: 1: camera.py: import: not found
camera.py: 2: camera.py: import: not found
from: can't read /var/mail/pydrive.auth
from: can't read /var/mail/pydrive.drive
from: can't read /var/mail/picamera
from: can't read /var/mail/time
camera.py: 9: camera.py: Syntax error: "(" unexpected
あれー?
python3 camera.pyで実行できた。参考URLのはshellで書いていたからだな。
crontab
code:cron
*/1 * * * * python3 /home/pi/hydroponics-logs/camera.py
動いてないっぽい
code:terminal
pi@raspberrypi:~/hydroponics-logs $ sudo /etc/init.d/cron status
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-08-17 17:17:03 JST; 1h 33min ago
Docs: man:cron(8)
Main PID: 286 (cron)
CGroup: /system.slice/cron.service
└─286 /usr/sbin/cron -f
8月 17 18:48:04 raspberrypi CRON2449: (CRON) info (No MTA installed, discarding output) 8月 17 18:48:04 raspberrypi CRON2449: pam_unix(cron:session): session closed for user pi 8月 17 18:49:01 raspberrypi CRON2461: pam_unix(cron:session): session opened for user pi by (uid=0) 8月 17 18:49:01 raspberrypi CRON2465: (pi) CMD (python3 /home/pi/hydroponics-logs/camera.py) 8月 17 18:49:03 raspberrypi CRON2461: (CRON) info (No MTA installed, discarding output) 8月 17 18:49:03 raspberrypi CRON2461: pam_unix(cron:session): session closed for user pi 8月 17 18:50:01 raspberrypi CRON2491: pam_unix(cron:session): session opened for user pi by (uid=0) 8月 17 18:50:01 raspberrypi CRON2495: (pi) CMD (python3 /home/pi/hydroponics-logs/camera.py) 8月 17 18:50:04 raspberrypi CRON2491: (CRON) info (No MTA installed, discarding output) 8月 17 18:50:04 raspberrypi CRON2491: pam_unix(cron:session): session closed for user pi cronのログを見る
*/1 * * * * python3 /home/pi/hydroponics-logs/camera.py >> /tmp/camera.log 2>&1
標準出力が1 標準エラーが2
標準エラーを標準出力に流す 2>&1
code:terminal
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "hydroponics-logs/camera.py", line 16, in <module> gauth.CommandLineAuth()
File "/home/pi/.local/lib/python3.5/site-packages/pydrive/auth.py", line 113, in _decorated
self.GetFlow()
File "/home/pi/.local/lib/python3.5/site-packages/pydrive/auth.py", line 443, in GetFlow
self.LoadClientConfig()
File "/home/pi/.local/lib/python3.5/site-packages/pydrive/auth.py", line 366, in LoadClientConfig
self.LoadClientConfigFile()
File "/home/pi/.local/lib/python3.5/site-packages/pydrive/auth.py", line 388, in LoadClientConfigFile
raise InvalidConfigError('Invalid client secrets file %s' % error)
pydrive.settings.InvalidConfigError: Invalid client secrets file ('Error opening file', 'client_secrets.json', 'No such file or directory', 2)
client_secrets.jsonがないと怒られている
credentials.jsonとして持っている
settings.yamlのsave_credentials_fileが絶対パスになっていないため、credentials.jsonにアクセスできない
*/1 * * * * (cd /home/pi/hydroponics-logs/ && python3 camera.py で解決
1時間おきに実行する
* */1 * * * (cd /home/pi/hydroponics-logs/ && python3 camera.py
ラズパイにリモートアクセスする
設置の際のカメラ調整、ディスプレイつなぐのむりぽ
参考:
設定
ラズパイ側
メニュー→設定→RaspberryPiの設定→インターフェース→VNCを有効にする
ifconfigでIPアドレスを確認
Mac側
ラズパイのIPアドレス、ユーザー名、パスワードで接続
接続できたが、カメラのプレビューは表示できない
できないっぽい。やりたいならネットワークにストリーミングするしかないんじゃない?とのこと
コマンド叩いて撮影できるようになっているだけまだマシ
設置
https://gyazo.com/d4df1f165144981cec90c410096f424e
https://gyazo.com/37db29ff52e537fd7c12fe9a640b6e3a